package com.wantup.demo01;

import lombok.Data;

import javax.xml.bind.SchemaOutputResolver;

/**
 * @author Zhaoluowei
 * @version 1.0
 * @date 2019/6/25 10:36
 * <p>
 * volatile 关键字：
 *  当多个线程操作共享数据时，保证内存中的数据可见。
 *
 *  代码底层有重排序机制。加了volatile关键字之后 就不能重排序了。
 *
 * 1。不具备互斥性。
 * 2。不能保证变量的原子性。 操作的原子性。操作的步骤不能分开。
 *
 */
public class TestVolatile {

    public static void main(String[] args) {
        ThreadDemo demo = new ThreadDemo();
        new Thread(demo).start();

        while (true) {
            if (demo.isFlag()) {
                System.out.println("-----------------------");
                break;
            }
        }


    }

}


class ThreadDemo implements Runnable {

    private volatile boolean flag = false;

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    @Override
    public void run() {

        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        flag = true;
        System.out.println("flag = " + isFlag());

    }
}




